package br.com.fatecmc.persephone.gestaoinformatica.core.dao.impl;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;

import br.com.fatecmc.core.dao.AbstractDAO;
import br.com.fatecmc.fatec.domain.Entidade;
import br.com.fatecmc.persephone.gestaoInformatica.domain.GestaoInformatica;
import br.com.fatecmc.persephone.gestaoInformatica.domain.Internet;
import br.com.fatecmc.persephone.propriedade.domain.Propriedade;

public class DAOGestaoInformatica extends AbstractDAO{

	@Override
	public void salvar(Entidade obj) throws IllegalArgumentException {
		try{
			Propriedade p = (Propriedade) obj;
			conexao.getConexao().createStatement(); 
	        String sql =  "INSERT INTO tb_propriedades_gestao_informatica (" +
	        		"id_propriedade, " +
	        		"interesse_curso_informatica_flg, " +
	        		"possui_computador_flg, " +
	        		"utiliza_computador_flg, " +
	        		"possui_nfe_flg, " +
	        		"endereco_site, " +
	        		"pretende_possuir_site_flg, " +
	        		"motivo_possuir_site, " +
	        		"possui_internet_flg, " +
	        		"qualidade_internet "+
	        		") " +
	        		"VALUES(?,?,?,?,?,?,?,?,?,?)";
	        PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
	        pstm.setInt(1, p.getId());
	        pstm.setBoolean(2, p.getGestaoInformatica().getInteresseCursoInformatica());
	        pstm.setBoolean(3, p.getGestaoInformatica().getPossuiComputador());
	        pstm.setBoolean(4, p.getGestaoInformatica().getUtilizaComputador());
	        
	        pstm.setBoolean(5, p.getGestaoInformatica().getPossuiNFe());
	        pstm.setString(6, p.getGestaoInformatica().getEnderecoSite());
	        pstm.setBoolean(7, p.getGestaoInformatica().getPretendePossuirSite());
	        pstm.setString(8, p.getGestaoInformatica().getMotivoSite());
	        if(p.getGestaoInformatica().getInternet() != null)
	        	pstm.setBoolean(9, true);
	        else
	        	pstm.setBoolean(9, false);
	        pstm.setString(10, p.getGestaoInformatica().getInternet().getQualidadeSinalInternet());
	        pstm.executeUpdate();
	        conexao.getConexao().close();
	        pstm.close();
	    } catch (SQLException ex) {
	        Logger.getLogger(DAOGestaoInformatica.class.getName()).log(Level.SEVERE, null, ex);
	    }
	}

	@Override
	public Entidade alterar(Entidade obj) {
		try{
			Propriedade p = (Propriedade) obj;
			conexao.getConexao().createStatement(); 
	        String sql =  "UPDATE tb_propriedades_gestao_informatica SET " +
	        		"id_propriedade=?, " +
	        		"interesse_curso_informatica_flg=?, " +
	        		"possui_computador_flg=?, " +
	        		"utiliza_computador_flg=?, " +
	        		"possui_nfe_flg=?, " +
	        		"endereco_site=?, " +
	        		"pretende_possuir_site_flg=?, " +
	        		"motivo_possuir_site=?, " +
	        		"possui_internet_flg=?, " +
	        		"qualidade_internet=?";
	        PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
	        pstm.setInt(1, p.getId());
	        pstm.setBoolean(2, p.getGestaoInformatica().getInteresseCursoInformatica());
	        pstm.setBoolean(3, p.getGestaoInformatica().getPossuiComputador());
	        pstm.setBoolean(4, p.getGestaoInformatica().getUtilizaComputador());
	        pstm.setBoolean(5, p.getGestaoInformatica().getPossuiNFe());
	        pstm.setString(6, p.getGestaoInformatica().getEnderecoSite());
	        pstm.setBoolean(7, p.getGestaoInformatica().getPretendePossuirSite());
	        pstm.setString(8, p.getGestaoInformatica().getMotivoSite());
	        if(p.getGestaoInformatica().getInternet() != null){
	        	pstm.setBoolean(9, true);
	        	pstm.setString(10, p.getGestaoInformatica().getInternet().getQualidadeSinalInternet());
	        }else{
	        	pstm.setBoolean(9, false);
	        	pstm.setString(10, null);
	        }
	        
	        pstm.executeUpdate();
	        conexao.getConexao().close();
	        pstm.close();
	    } catch (SQLException ex) {
	        Logger.getLogger(DAOGestaoInformatica.class.getName()).log(Level.SEVERE, null, ex);
	    }
		return obj;
	}

	@Override
	public boolean excluir(Entidade obj) {
		try{
			Propriedade p = (Propriedade) obj;
			conexao.getConexao().createStatement(); 
	        String sql =  "DELETE FROM tb_propriedades_gestao_informatica WHERE id_propriedade=?";
	        PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
	        pstm.setInt(1, p.getId());
	        pstm.executeUpdate();
	        conexao.getConexao().close();
	        pstm.close();
	        return true;
	    } catch (SQLException ex) {
	        Logger.getLogger(DAOGestaoInformatica.class.getName()).log(Level.SEVERE, null, ex);
	        return false;
	    }
		
	}

	@Override
	public Collection consultar(Entidade obj) {
		ArrayList<GestaoInformatica> lista = new ArrayList<GestaoInformatica>();
		try{
			Propriedade p = (Propriedade) obj;
			conexao.getConexao().createStatement();
			if(p.getId() != null){
				String sql =  "SELECT * FROM tb_propriedades_gestao_informatica WHERE id_propriedade=?";
		        PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
		        pstm.setInt(1, p.getId());
		        ResultSet rs = pstm.executeQuery();
		        
		        while (rs.next()){
		        	GestaoInformatica ge = new GestaoInformatica();
		        	ge.setEnderecoSite(rs.getString("endereco_site"));
		        	ge.setInteresseCursoInformatica(rs.getBoolean("interesse_curso_informatica_flg"));
		        	Internet i = new Internet();
		        	if(rs.getBoolean("possui_internet_flg") != false){
		        		
		        		String qualidade = rs.getString("qualidade_internet");
		        		if(qualidade != null){
		        			i.setQualidadeSinalInternet(qualidade);
		        		}else{
		        			i.setQualidadeSinalInternet("");
		        		}
						ge.setInternet(i);
		        	}else{
		        		ge.setInternet(null);
		        	}
					ge.setMotivoSite(rs.getString("motivo_possuir_site"));
					ge.setPossuiComputador(rs.getBoolean("possui_computador_flg"));
					ge.setPossuiNFe(rs.getBoolean("possui_nfe_flg"));
					ge.setPretendePossuirSite(rs.getBoolean("pretende_possuir_site_flg"));
					ge.setUtilizaComputador(rs.getBoolean("utiliza_computador_flg"));
					p.setGestaoInformatica(ge);
		        	lista.add(p.getGestaoInformatica());
		        }
		        
		        conexao.getConexao().close();
		        pstm.close();
		        
			}	        
	        
	    } catch (SQLException ex) {
	        Logger.getLogger(DAOGestaoInformatica.class.getName()).log(Level.SEVERE, null, ex);
	    }
		return lista;
	}

}
